﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Tipler.Enumlar;
using Tipler.Siniflar;
using Tipler.DataSetler;
using DataServis;


namespace IsKurallari
{
    public class OrtakIsKurali : TemelIsKurali
    {
        public FonksiyonSonuc<Int32> YeniIDGetir(string TabloAdi)
        {
            FonksiyonSonuc<Int32> sonuc = new FonksiyonSonuc<Int32>();
            int nKayitID;

            VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir(true);

            try
            {
                List<IDbDataParameter> pParamsUpdate = new List<IDbDataParameter>();
                List<IDbDataParameter> pParamsSelect = new List<IDbDataParameter>();
                pParamsUpdate.Add(oVeriKatmani.CreateParameter("TabloAdi", DbType.String, TabloAdi));
                pParamsSelect.Add(oVeriKatmani.CreateParameter("TabloAdi", DbType.String, TabloAdi));

                string sSQLUpdate = "UPDATE SEQUENCES SET KAYITID = KAYITID + 1 WHERE TabloAdi = " + PrmSgn + "TabloAdi";
                string sSQLSelect = "SELECT KAYITID FROM SEQUENCES WHERE TabloAdi = " + PrmSgn + "TabloAdi";

                oVeriKatmani.SQLKomutCalistir(sSQLUpdate, pParamsUpdate);
                object oKAyitID = oVeriKatmani.TekDegerGetir(sSQLSelect, pParamsSelect);
                nKayitID = Convert.ToInt32(oKAyitID);

                sonuc.Sonuc = nKayitID;

                oVeriKatmani.TransactionBitir();
            }
            catch (Exception ex)
            {
                oVeriKatmani.TransactionGeriAl();
                sonuc.Ex = ex;
                sonuc.Hata = TabloAdi + " tablosu için yeni ID okunamadı.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }

        public FonksiyonSonuc<bool> HataKaydet(HataLogDataSet dsHataLog)
        {
            FonksiyonSonuc<Boolean> sonuc = new FonksiyonSonuc<Boolean>();
            try
            {
                VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();
                oVeriKatmani.TopluVeriIsleme(dsHataLog);
                sonuc.Sonuc = true;
            }
            catch (Exception ex)
            {
                sonuc.Sonuc = false;
                sonuc.Ex = ex;
                sonuc.Hata = dsHataLog.HataLog.TableName+ " kaydedilemedi.";
                sonuc.HataKod = "70001";
            }
            return sonuc;
        }

        public FonksiyonSonuc<HataLogDataSet> HataListele(DateTime basTarih, DateTime bitTarih, int KullaniciID, int durum)
        {
            FonksiyonSonuc<HataLogDataSet> Sonuc = new FonksiyonSonuc<HataLogDataSet>();

            List<IDbDataParameter> oParametreler = new List<IDbDataParameter>();
            VeriArabirim oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();

            HataLogDataSet SonucDataSet = new HataLogDataSet();
            StringBuilder sb = new StringBuilder();

            try
            {
                oVeriKatmani = VeriServis.VeriTabaniObjesiGetir();

                sb.Append("SELECT h.*,k.ADI,k.SOYADI FROM HataLog h INNER JOIN KIMLIK k ON h.KullaniciID = k.KullaniciID" );
                sb.Append(" WHERE 1=1");

                if(basTarih != DateTime.MinValue)
                {
                    sb.Append(" AND h.HATATARIHI >=" + PrmSgn + "basTarih");
                    oParametreler.Add(oVeriKatmani.CreateParameter("basTarih", DbType.DateTime, basTarih));
                }

                if (bitTarih != DateTime.MinValue)
                {
                    bitTarih = bitTarih.AddHours(23).AddMinutes(59).AddSeconds(59);
                    sb.Append(" AND h.HATATARIHI <=" + PrmSgn + "bitTarih");
                    oParametreler.Add(oVeriKatmani.CreateParameter("bitTarih", DbType.DateTime, bitTarih));

                    
                }

                if (KullaniciID != -1)
                {
                    sb.Append(" AND h.KullaniciID =" + PrmSgn + "KullaniciID");
                    oParametreler.Add(oVeriKatmani.CreateParameter("KullaniciID", DbType.Int32, KullaniciID));
                }

                if (durum != -1)
                {
                    sb.Append(" AND h.HATAGIDERILDI =" + PrmSgn + "durum");
                    oParametreler.Add(oVeriKatmani.CreateParameter("durum", DbType.Int32, durum));
                }

                oVeriKatmani.VeriGetir(SonucDataSet, sb.ToString(), oParametreler);
                Sonuc.Sonuc = SonucDataSet;
            }
            catch (Exception ex)
            {
                Sonuc.Ex = ex;
                Sonuc.Hata = "HataLog'dan veri okunamadı.";
                Sonuc.HataKod = "10001";
            }
            return Sonuc;
        }
    }
}
